package lambda;
/*
使用lambda表达式的前提：
    lambda表达式虽然说是取代接口的匿名内部类
    但也不是什么接口都能用lambda表达式创建子类对象
    lambda表达式要求的接口中，必须有且仅有一个必须要实现的抽象方法
    这种接口在java中，被称之为“功能接口”
 */
public class Demo {

}

//功能接口：必须有且仅有一个必须要实现的抽象方法@FunctionalInterface
@FunctionalInterface
interface IA {
    void m1();
}

//No target method found --->接口中没有抽象方法不行
//@FunctionalInterface
interface IB {
    //不是功能接口，一个抽象方法都没有
}

//Multiple non-overriding abstract
// methods found in interface lambda.IC
//@FunctionalInterface
interface IC {
    //不是功能接口，有多个抽象方法
    void m1();

    void m2();

    void m3();
}

//特殊情况:
//1.有不需要实现的抽象方法
//2.默认方法
//3.静态方法

@FunctionalInterface
interface ID {
    //ID这个接口也是功能接口
    //m1方法就是那个必须要实现的抽象方法
    void m1();

    //equals方法不用必须实现
    boolean equals(Object object);

    default void m2() {

    }//默认方法不需要子类实现

    static void staticMethod() {

    }//静态方法不需要子类实现


}


